# 继承
# 对于面向对象的继承来说，其实就是将多个类的共有方法提取到父类里面，
# 子类仅需要继承父类，而不必一一实现每个方法

# 在定义子类时要继承父类，只需要类名后面的小括号()中写上父类的名字，
# 那么父类的属性、方法，会被继承给子类。
class Animal:
    def eat(self):
        print("我在吃东西")
        pass
    def drink(self):
        print("我在喝水")
        pass
    pass
class Dog(Animal):
    def wangwangSpeak(self):
        print("我会汪汪叫")
        pass
    pass
class Cat(Animal):
    def miaomiaoSpeak(self):
        print("我会喵喵叫")
        pass
    pass
hsq=Dog()
hsq.drink()
hsq.eat()
hsq.wangwangSpeak()
bsm=Cat()
bsm.eat()
bsm.drink()
bsm.miaomiaoSpeak()
# ###########################多继承####################################
# class A:
#     def a(self):
#         print("a方法")
# class B:
#     def b(self):
#         print("b方法")
# class C(A,B):
#     pass
# c=C()
# c.a()
# c.b()
# 继承中，子类调用父类方法的顺序
class Base:
    def test(self):
        print("我是Base中的test方法")
        pass
    pass
class Base1:
    def test(self):
        print("我是Base1中的test方法")
        pass
    pass
class A(Base):
    def test(self):
        print("我是A类中的test方法，我继承的是Base类")
        pass
    pass
class B(Base1):
    def test(self):
        print("我是B类中的test方法，我继承的是Base1类")
        pass
    pass
class C(A,B):
    pass
c=C()
c.test()
# __mro__方法，可以用来解析方法执行的顺序
# 在上述的案例中，方法执行的顺序为C->A->Base->B->Base1,一旦找到，则寻找过程立即中断，不会在往下面去找
print(C.__mro__)

# 继承的传递
# 类的传递过程中，我们把父类又称为基类，子类又称为派生类，父类的属性和方法可以一级一级的传递到子类
class GrandFather:
    def eat(self):
        print("吃饭")
        pass
    pass
class Father(GrandFather):
    pass
class Son(Father):
    pass
son=Son()
son.eat()


